package main.leetcode.clockin.April;

/**
 * 面试题01.07.旋转矩阵
 *
 * <p>给你一幅由 N × N 矩阵表示的图像，其中每个像素的大小为 4 字节。请你设计一种算法，将图像旋转 90 度。
 *
 * <p>不占用额外内存空间能否做到？
 */
public class day7 {
    public static void main(String[] args) {
        new day7().rotate(new int[][] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}});
    }

    //    public void rotate(int[][] matrix) {
    //        int n = matrix.length;
    //        if (n < 2) return;
    //        int[][] clone = new int[n][n];
    //        for (int i = 0; i < n; i++) {
    //            clone[i] = matrix[i].clone();
    //        }
    //        for (int i = 0; i < n; ++i) {
    //            for (int j = 0; j < n; ++j) {
    //                matrix[j][n - i - 1] = clone[i][j];
    //            }
    //        }
    //        System.out.println(Arrays.deepToString(matrix));
    //    }

    // 原地
    public void rotate(int[][] matrix) {
        int n = matrix.length;
        if (n < 2) return;

        for (int i = 0; i < n; ++i) {
            // 根据对角线翻转
            for (int j = i; j < n; ++j) {
                matrix[i][j] = matrix[i][j] + matrix[j][i] - (matrix[j][i] = matrix[i][j]);
            }
            // 根据中线翻转
            for (int j = 0; j < n >> 1; ++j) {
                matrix[i][j] =
                        matrix[i][j] + matrix[i][n - j - 1] - (matrix[i][n - j - 1] = matrix[i][j]);
            }
        }
    }
}
